package cn.springcloud.fix.common.core.utils.file;

import cn.springcloud.fix.common.core.constant.StringPool;
import cn.springcloud.fix.common.core.utils.DateUtil;
import cn.springcloud.fix.common.core.utils.ImageUtil;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Date;

/**
 * 文件代理类
 */
public class FileProxyFactory implements IFileProxy {

    @Override
    public File rename(File f, String path) {
        File dest = new File(path);
        boolean sus = f.renameTo(dest);
        return dest;
    }

    @Override
    public String[] path(File f, String dir) {
        //避免网络延迟导致时间不同步
        long time = System.nanoTime();

        String uploadPath = getFileDir(dir, FileConstant.me().getUploadRealPath()) + time + getFileExt(f.getName());
        String virtualPath = getFileDir(dir, FileConstant.me().getUploadCtxPath()) + time + getFileExt(f.getName());
        return new String[]{FileUtil.formatUrl(uploadPath), FileUtil.formatUrl(virtualPath)};
    }

    /**
     * 获取文件后缀
     *
     * @param fileName 文件名
     * @return 文件后缀
     */
    public static String getFileExt(String fileName) {
        if (!fileName.contains(StringPool.DOT)) {
            return ".jpg";
        } else {
            return fileName.substring(fileName.lastIndexOf(StringPool.DOT));
        }
    }

    /**
     * 获取文件保存地址
     *
     * @param dir     目录
     * @param saveDir 保存目录
     * @return 地址
     */
    public static String getFileDir(String dir, String saveDir) {
        return saveDir + File.separator + dir + File.separator + DateUtil.format(new Date(), "yyyyMMdd") + File.separator;
    }

    /**
     * 图片压缩
     *
     * @param path 文件地址
     */
    @Override
    public void compress(String path) {
        try {
            ImageUtil.zoomScale(ImageUtil.readImage(path), new FileOutputStream(new File(path)), null, FileConstant.me().getCompressScale(), FileConstant.me().isCompressFlag());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
